<?php
class core{
    public $user = array();
    protected $config = array();
	protected $mui = array();
	// Основная функция и загрузка mui
	public function core($args){
		$this->config = $args;
		if(isset($_REQUEST['mdl'])) $this->config['mdl'] = $this->get_mdl_name($_REQUEST['mdl']);
		$lang_files = opendir((php_sapi_name()=="cli" ? $_SERVER['argv']['2'] : "")."mui");
		while($name = readdir($lang_files)){
			if($name == 'core.xml' || $name == $this->config['mdl'].'.xml'){
				$temp_content = simplexml_load_file((php_sapi_name()=="cli" ? $_SERVER['argv']['2'] : "").'mui/'.$name);
				$this->mui = array_merge( (array) $this->mui,(array) $temp_content[$this->config['lang']]);
			}
		}
	}

	// Функция извлечения свойств конфигурации

	public function config($param){
		return $this->config[$param];
	}

    // Функция преобразования строки запроса HTTP в массив
    public function qstring_to_array($qstring){
        $temparray = explode('&', $qstring);
        for($i=1;$i<count($temparray);$i++){
            list($name,$val) = explode('=',$temparray[$i]);
            $ret_args[$name] = $val;
        }
        $ret_args['post'] = $_POST;
        $ret_args['mdl'] = $this->config['mdl'];
        return $ret_args;
    }

    // Функция задания модуля по умолчанию в случае отсутствия входного значения $_REQUEST['mdl']
    public function get_mdl_name($mdl){
        if(isset($mdl) && $mdl != ''){
            return $mdl;
        }else if($this->isCli()){
            return $_SERVER["argv"]["1"];
        }else return $this->config['mdl'];
    }
	
	
	// Функция проверки имени файла при сканировании папки
	public function check_file_name($file){
		if($file != '..' && $file != '.' && $file != '.svn' && $name != '_notes') return true;
	}
  
  	// Функция для определения интерфейса вывода 
  	public function isCli() {
    	return php_sapi_name()==="cli";
  	}
	
	// Функция отправки почты через smtp socket с авторизацией. Оптимизировано для mdaemon smtp
	public function mail($from,$to,$subj,$body){
		if ($SMTPIN = fsockopen ($this->config['smtpserver'], $this->config['smtpport'])){
			fputs ($SMTPIN, "EHLO ".$_SERVER['HTTP_HOST']."\r\n"); 
			$talk["hello"] = fgets ( $SMTPIN, 1024 ); 
			fputs($SMTPIN, "AUTH LOGIN\r\n");
			$talk["res"]=fgets($SMTPIN,1024);
			$talk["res"].=fgets($SMTPIN,1024);
			$talk["res"].=fgets($SMTPIN,1024);
			$talk["res"].=fgets($SMTPIN,1024);
			$talk["res"].=fgets($SMTPIN,1024);
			$talk["res"].=fgets($SMTPIN,1024);
			$talk["res"].=fgets($SMTPIN,1024);
			fputs($SMTPIN, base64_encode ( $this->config['smtpuser'] )."\r\n");
			$talk["user"]=fgets($SMTPIN,1024);
			fputs($SMTPIN, base64_encode ( $this->config['smtppass'] )."\r\n");
			$talk["pass"]=fgets($SMTPIN,256);
			fputs ($SMTPIN, "MAIL FROM: <".$this->config['smtpuser'].">\r\n"); 
			$talk["From"] = fgets ( $SMTPIN, 1024 ); 
			fputs ($SMTPIN, "RCPT TO: <".$to.">\r\n"); 
			$talk["To"] = fgets ($SMTPIN, 1024); 
			fputs($SMTPIN, "DATA\r\n");
			$talk["data"]=fgets( $SMTPIN,1024 );
			fputs($SMTPIN, "To: <".$to.">\r\nFrom:=?UTF-8?B?".base64_encode($from)."?=<".$from.">\r\nContent-type: text/html; charset=utf-8\r\nSubject:=?UTF-8?B?".base64_encode($subj)."?=\r\n\r\n\r\n".$body."\r\n.\r\n");
			$talk["send"]=fgets($SMTPIN,256); 
			fputs ($SMTPIN, "QUIT\r\n"); 
			fclose($SMTPIN); 
		} 
		return $talk;
	}
}
?>
